package br.com.sms.facade;

import java.util.List;

import br.com.sms.dao.UsuarioDao;
import br.com.sms.dominio.Cliente;
import br.com.sms.dominio.Perfil;
import br.com.sms.dominio.Usuario;
import br.com.sms.enuns.Situacao;
import br.com.sms.excecao.SmsException;
import br.com.sms.util.Cripto;
import br.com.sms.util.DataUtil;
import br.com.sms.util.MensagensErro;


public class UsuarioFacade {

	private UsuarioDao dao;

	public UsuarioFacade(){
		this.dao = new UsuarioDao();
	}


	/**
	 * : Método para criptografar a senha.
	 * @param senha
	 * @return
	 */
	public String criptografaSenha(String senha){
		Cripto cripto = new Cripto();
		return cripto.criptografar(senha);
	}

	public void validarCamposLogin(String login, String senha) throws SmsException{
		if(login == null || login.trim().length() == 0){
			throw new SmsException(MensagensErro.CAMPO_OBRIGATORIO.replace("?", "Login"));
		}
		if(senha == null || senha.trim().length() == 0){
			throw new SmsException(MensagensErro.CAMPO_OBRIGATORIO.replace("?", "Senha"));
		}
	}

	public Usuario recuperarUsuario(String login){
		return dao.recuperarUsuario(login);
	}

	public Usuario recuperarUsuario(int id){
		return dao.recuperarUsuario(id);
	}

	public void validaCamposUsuario(Usuario usuario, String confirmaSenha) throws SmsException{

		if(usuario.getNomeUsuario() == null || usuario.getNomeUsuario().trim().length() == 0){
			throw new SmsException(MensagensErro.CAMPO_OBRIGATORIO.replace("?", "Nome"));
		}

		if(usuario.getEmail() == null || usuario.getEmail().trim().length() == 0){
			throw new SmsException(MensagensErro.CAMPO_OBRIGATORIO.replace("?", "E-mail"));
		}

		if(usuario.getEmail() != null && !usuario.getEmail().toLowerCase().contains("@")){
			throw new SmsException(MensagensErro.EMAIL_INVALIDO);
		}


		if(usuario.getCpf() == null || usuario.getCpf().trim().length() == 0){
			throw new SmsException(MensagensErro.CAMPO_OBRIGATORIO.replace("?", "CPF"));
		}/*else{
			String cpf = usuario.getCpf().replace(".", "");
			cpf = cpf.replace("-", "");
			CPFValidator cpfValidator = (CPFValidator)ValidatorFactory.getInstance().getValidator(IValidation.VALIDATOR_CPF);
			cpfValidator.setCpf(cpf);
			if(!cpfValidator.isValid()){
				throw new SmsException(MensagensErro.CPF_INVALIDO);
			}
		}*/



		if(usuario.getRg() == null || usuario.getRg().trim().length() == 0){
			throw new SmsException(MensagensErro.CAMPO_OBRIGATORIO.replace("?", "RG"));
		}

		if(usuario.getDataNascimentoString() == null || usuario.getDataNascimentoString().trim().length() == 0){
			throw new SmsException(MensagensErro.CAMPO_OBRIGATORIO.replace("?", "Data Nascimento"));
		}else{
			usuario.setDataNascimento(DataUtil.getData(usuario.getDataNascimentoString()));
		}

		if(usuario.getSexo() == null){
			throw new SmsException(MensagensErro.CAMPO_OBRIGATORIO.replace("?", "Sexo"));
		}

		if(usuario.getUf() == null){
			throw new SmsException(MensagensErro.CAMPO_OBRIGATORIO.replace("?", "UF"));
		}

		if(usuario.getLogin() == null || usuario.getLogin().trim().length()== 0){
			throw new SmsException(MensagensErro.CAMPO_OBRIGATORIO.replace("?", "Login"));
		}

		if(usuario.getSenha() == null || usuario.getSenha().trim().length() == 0){
			throw new SmsException(MensagensErro.CAMPO_OBRIGATORIO.replace("?", "Senha"));
		}


		if(confirmaSenha == null || confirmaSenha.trim().length() == 0){
			throw new SmsException(MensagensErro.CAMPO_OBRIGATORIO.replace("?", "Confirma Senha"));
		}

		if(usuario.getPerfil() == null || usuario.getPerfil().getId() == 0){
			throw new SmsException(MensagensErro.CAMPO_OBRIGATORIO.replace("?", "Perfil"));
		}



		if(!usuario.getSenha().equals(confirmaSenha)){
			throw new SmsException(MensagensErro.CONFIRMACAO_SENHA_INVALIDA);
		}
		usuario.setSituacao(Situacao.ATIVO);
	}

	public void salvarUsuario(Usuario usuario){
		usuario.setSenha(criptografaSenha(usuario.getSenha()));
		usuario.setSituacao(Situacao.ATIVO);
		dao.salvarUsuario(usuario);
	}

	public List<Usuario> recuperarUsuarios(String nome, Situacao situacao, Cliente cliente){
		return dao.recuperarUsuarios(nome, situacao, cliente);
	}
	
	public List<Usuario> recuperarUsuarios(Perfil perfil){
		return dao.recuperarUsuarios(perfil);
	}
	
	public void excluirUsuario(Usuario usuario){
		Usuario usr = dao.recuperarUsuario(usuario.getId());
		usr.setSituacao(Situacao.INATIVO);
		dao.salvarUsuario(usr);
	}

}
